/* 
 * File:   threads.h
 * Author: f10-kafedra
 *
 * Created on 26 Октябрь 2011 г., 12:27
 */

#ifndef THREADS_H
#define	THREADS_H

#include <boost/thread/thread.hpp>
#include <QThread>
#include <QTimer>
#include <QtNetwork/QTcpSocket>
#include <iostream>
#include <QByteArray>
#include "structs.h"
#include "form_loadfile.h"

#define MAGIC_USER_ID 31337
//#define HOST "192.168.9.120"
//#define HOST "192.168.9.18"
//#define HOST "127.0.0.1"
#define PORT 6666

#define DEBUG_OUTPUT

using namespace std;

class thread_LoadFile// : public QThread
{
public:
    thread_LoadFile(QString filename);
    virtual ~thread_LoadFile();
    
    vector <info> *infos;
    void run();
    
    form_loadfile wndLoadInfos;
    
private:
    info inform;
    QString filecfg;
    
    
    
protected:
    
};

/******************************************************************************/

class thread_Engine : public QThread
{
public:
    explicit thread_Engine();
    virtual ~thread_Engine();

    QTcpSocket* tcpSocket;
    void loginToIrbis();
    void getUser_ID(QString);
   
    
    QString threadMessage;
    bool connected;
    QString login;
    QString pass;
    request req;
    request clientRequest;
    int reqCounter;
    queueRequests queueRequest;
    requests structRequest;
    vector <queueRequests> query;
    QString lastBuffer;
    bool inWork;
    bool listen;
    bool needReadAnswer;
    bool serverModeOutput;
    QString parametr;

private:
    bool AddingRequest;
    int checkQueue();
    void QueueOperation();
    int addQueryInQueue(request, QString);
    char* currentOperation(request);
    void checkLoginUnloginInQueue(request, QString);
    
    // формирование запроса на регистрацию в базе
    QString loginRequest(QString codeCommand, QString codeAPM);
    // формирование запроса на разрегистрацию в базе
    QString unLoginRequest(QString codeCommand, QString codeAPM);
    // формирование общего вида запроса с учетными данными
    QString generalRequestEditEnabled(QString codeCommand, QString codeAPM, QString parameters);
    // подключение к порту ирбиса
    int connectToHostBase(QString host, int port);
    // регистрация в базе
    void loginToBase();
    // разрегистрация из базы
    void unloginFromBase();
    // отправка на сервер    
    int sendData(QString data);
    // получить запись пользователя по его ID
    void getUserByID(QString id);
    
private slots:
    void mainLoop();
    //void slotConnected();
    //void slotDisConnected();
    //void slotReadBytes();
    
protected:
    void run();
    
};

#endif	/* THREADS_H */